local serviceMain = import("android.ext.MainService")
local alert = import("android.ext.Alert")
local Tools = import("android.ext.Tools")
local MainStart = import("android.ext.Main")
local Build = import("android.os.Build")

function isLogin()
    local sharedPreferences = Tools.getSharedPreferences()
    local serverKey = sharedPreferences.getString("protocol_1", "")
    return serverKey == "2"
end

textContent = [[


### 用户协议与安全声明

**欢迎您使用【AGG】（以下简称“本软件”）。请您务必审慎阅读、充分理解本协议各条款内容，特别是免除或者限制责任的条款，以及开通或使用某项服务的单独协议。**

**除非您已阅读并接受本协议所有条款，否则您无权下载、安装或使用本软件及相关服务。您的下载、安装、使用、登录等行为即视为您已阅读并同意上述协议的约束。**

#### **一、 软件定义与授权范围**

1.1 本软件是一款Android系统内存信息查看与分析工具，旨在为**软件开发人员等技术专业人士**（以下简称“授权用户”）在**合法、授权的开发与调试环境**中提供进程内存状态监控、分析服务。

1.2 本软件授予您的是一项个人的、不可转让及非排他性的许可，仅限于您在遵守本协议条款的前提下使用本软件。

#### **二、 可接受的用途**

您承诺仅将本软件用于以下**合法及道德**的目的：
*   分析和调试您自己开发或拥有明确授权的应用程序。
*   在获得明确授权的前提下，对您负责维护或测试的第三方应用程序进行性能分析与故障排查。
*   用于教育目的或个人技术学习，且所有操作均在您自己拥有合法权限的设备上进行。
*   任何其他不违反法律法规、不侵犯他人合法权益的正当技术研究活动。

#### **三、 严格禁止的用途（重要）**

您**明确承诺不得**将本软件用于以下任何被禁止的用途，这些行为是严重违反本协议的行为：
*   **严禁侵犯隐私：** 不得未经他人明确同意，擅自查看、监控、获取或窃取其他用户、其他应用程序的私有数据和内存信息。
*   **严禁商业滥用：** 不得在未获得明确授权的情况下，对您未拥有合法权利的商业软件进行逆向工程、破解或任何形式的侵权分析。
*   **严禁任何非法活动：** 您不得使用本软件从事任何违反当地法律法规、国家法律或国际法律的行为。

#### **四、 安全与免责声明**

4.1 **“按原样”提供：** 本软件仅作为技术工具提供，其准确性和完整性不受担保。开发者不对因使用本软件而产生的任何直接或间接结果负责。

4.2 **用户自行承担责任：** 您清楚认知到，对系统及其他应用程序进程进行逆向工程等操作存在潜在风险（包括但不限于应用程序崩溃、数据丢失、账号封禁等）。**您必须自行承担使用本软件及基于其信息进行操作所产生的一切风险和责任。**

4.3 **不鼓励对非授权进程的操作：** 我们强烈不建议且不鼓励您将本软件用于您不具备合法调试权限的进程。任何因此类行为导致的后果（包括但不限于账号被封禁、法律责任等），均由用户自行承担，与本软件开发者无关。

4.4 **无责任豁免：** 对于因您违反本协议、滥用本软件而导致的任何第三方索赔、投诉或损失，您应独立承担责任，并使本软件开发者免于损害。

#### **五、 数据与隐私**

5.1 本软件在本地处理设备内存信息，**我们郑重声明：本软件不会以任何形式上传、收集、存储或传播您所查看的任何进程的内存数据。** 所有分析均在您的设备本地完成。

5.2 我们可能为改进软件体验而收集**匿名的、与性能相关的诊断数据**（如崩溃报告、功能使用情况），这些数据不会包含任何您的个人或应用程序的敏感内存内容。

#### **六、 协议变更与终止**

6.1 我们有权随时修改本协议的任何条款。修改后的协议将在本页面公布后生效。您继续使用本软件即表示您接受修改后的协议。

6.2 如果您违反本协议，我们有权立即终止向您提供本软件和服务，而无需承担任何责任。



**请您再次确认：** 我已充分阅读、理解并同意以上全部条款。我承诺我将成为一名负责任的“授权用户”，仅将本软件用于合法和道德的用途。我理解任何滥用行为都将由我个人承担全部法律和道德责任。
]]

TextTitle = {
	composeType = "Text",
    content = function(scope)
        scope.this.fontSize = scope.TextUnit(17)
    end,
	text = "用户协议与安全声明",
}

TextContent = {
	composeType = "Text",
    content = function(scope)
        scope.this.fontSize = scope.TextUnit(13)
    end,
	text = textContent,
}

ButtonLogin = {
    composeType = "Button",
    text = "已阅且同意此协议",
    func = function()
        Tools.getSharedPreferences().edit().putString("protocol_1", "2").apply()
        alert.dismissAll()
    end,
}

loginLayout = {
    composeType = "LazyColumn",
    modifier = Modifier
        .fillMaxSize()
        .padding(16)
        ,
    TextTitle,
    TextContent,
    ButtonLogin
}


if not isLogin() then
    gg.composePreview(loginLayout, true)
end

function getPrefs(a, b)
    local sharedPreferences = Tools.getSharedPreferences()
    local serverKey = sharedPreferences.getString(a, b)
    return serverKey
end

function getKey()
    return getPrefs("server_key", "")
end

if getPrefs("update_server", "") ~= "19" then
    gg.toast("正在更新依赖库......")
    local path = Tools.getContext().getFilesDir().getAbsolutePath() .. "/" .. Tools.getHiddenDir() .. "/" .. "libserver.so"
    local File = import("java.io.File")
    File(path).delete()
    local d = gg.download("https://pan.new-cdn.com/f/d/PqVsp/pipe_server",
             path)
    Tools.chmod(d, "0777")
    Tools.getSharedPreferences().edit().putString("update_server", "19").apply()
    gg.toast("更新完成，请重新启动AGG")
    gg.sleep(3000)
    MainStart.exitAGG()
end

function isLogin()
    return getKey() ~= ""
end

function login(k)
    serviceMain.instance.getTabIndex(k, function(i, s)--0失败 1首次登录 2已经登录
        if i == 0 then
            gg.toast("登录失败: " .. s)
            Tools.getSharedPreferences().edit().putString("server_key", "").apply()
            Tools.getSharedPreferences().edit().putInt("rw_type", 2).apply()
            return
        end
        if i == 1 then
            gg.toast("登录成功")
            gg.setTabVisible(false)
            Tools.getSharedPreferences().edit().putString("server_key", s).apply()
            Tools.getSharedPreferences().edit().putString("server_key_s", k).apply()
            
        elseif i == 2 then
            gg.toast("登录成功")
            gg.setTabVisible(false)
        end
        serviceMain.instance.getMemoryInfo(function(code)
            Tools.getSharedPreferences().edit().putInt("rw_type", code).apply()
            serviceMain.instance.updateView()
        end)
    end)
end

function getOsVersion()
    local System = import("java.lang.System")
    return System.getProperty("os.version")
end

coefficient = ""
function isSupport()
    local version = getOsVersion()
    if not version then
        return false
    end
    if #version < 4 then
        return false
    end
    if version:sub(0, 4) == "4.14" then
        return true
    end
    
    if version:sub(0, 4) == "5.10" then
        coefficient = 5
        if #version < 15 then
            return false
        end
        local start, end_ = version:find("android")
        local apiVersion = version:sub(end_ + 1, end_ + 2)
        local cfi_url = ""
        local mem_url = ""
        if apiVersion == "12" then
            cfi_url = "https://pan.new-cdn.com/f/d/GW0SG/CFI-5.10-31.ko"
            mem_url = "https://pan.new-cdn.com/f/d/ok2h4/Mem-enc-5.10-12.ko"
        elseif apiVersion == "13" then
            cfi_url = "https://pan.new-cdn.com/f/d/ro0te/CFI-5.10-33.ko"
            mem_url = "https://pan.new-cdn.com/f/d/vE1U3/Mem-enc-5.10-13.ko"
        else
            gg.toast("暂不支持当前Android版本: " .. apiVersion)
            return false
        end
        local a = gg.download(cfi_url, Tools.getContext().getFilesDir().getAbsolutePath() .. "/" .. Tools.getHiddenDir() .. "/" .. "CFI.ko")
        local d = gg.download(mem_url, Tools.getContext().getFilesDir().getAbsolutePath() .. "/" .. Tools.getHiddenDir() .. "/" .. "Mem.ko")
        Tools.chmod(a, "0666")
        Tools.chmod(d, "0666")
        return true
    end
    if version:sub(0, 4) == "5.15" then
        coefficient = 5
        if #version < 15 then
            return false
        end
        local start, end_ = version:find("android")
        local apiVersion = version:sub(end_ + 1, end_ + 2)
        local cfi_url = ""
        local mem_url = ""
        if apiVersion == "13" then
            cfi_url = "https://pan.new-cdn.com/f/d/dXVH8/CFI-5.15-33.ko"
            mem_url = "https://pan.new-cdn.com/f/d/mYKcV/Mem-enc-5.15-13.ko"
        elseif apiVersion == "14" then
            cfi_url = "https://pan.new-cdn.com/f/d/A1Mtq/CFI-5.15-34.ko"
            mem_url = "https://pan.new-cdn.com/f/d/wx2Fe/Mem-enc-5.15-14.ko"
        else
            gg.toast("暂不支持当前Android版本: " .. apiVersion)
            return false
        end
        local a = gg.download(cfi_url, Tools.getContext().getFilesDir().getAbsolutePath() .. "/" .. Tools.getHiddenDir() .. "/" .. "CFI.ko")
        local d = gg.download(mem_url, Tools.getContext().getFilesDir().getAbsolutePath() .. "/" .. Tools.getHiddenDir() .. "/" .. "Mem.ko")
        Tools.chmod(a, "0666")
        Tools.chmod(d, "0666")
        return true
    end
    if version:sub(0, 3) == "6.1" then
        coefficient = 6
        local d = gg.download("https://pan.new-cdn.com/f/d/M06TL/Mem-enc-6.1-14.ko",
             Tools.getContext().getFilesDir().getAbsolutePath() .. "/" .. Tools.getHiddenDir() .. "/" .. "Mem.ko")
        Tools.chmod(d, "0666")
        return true
    end
    if version:sub(0, 3) == "6.6" then
        coefficient = 6
        local d = gg.download("https://pan.new-cdn.com/f/d/BonUG/Mem-enc-6.6-15.ko",
             Tools.getContext().getFilesDir().getAbsolutePath() .. "/" .. Tools.getHiddenDir() .. "/" .. "Mem.ko")
        Tools.chmod(d, "0666")
        return true
    end
end

if not isLogin() then
    if not isSupport() then
        gg.toast("当前内核版本暂不支持")
        return
    end
    function onClick(t)
        if t[1] ~= "" then
            login(t[1] .. "-" .. coefficient)
        end
    end
    gg.copyText("http://985.so/at4md")
    gg.toast("已复制卡密购买链接到剪切板")
    local view = gg.viewPrompt({"卡密登录"}, {}, {"password"}, onClick)
    gg.mainTabs("驱动读写", view, false)
else
    login(getPrefs("server_key_s", ""))
end